package com.mazaiting.manager.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.mazaiting.common.core.domain.result.Option;
import com.mazaiting.common.core.ex.exceptions.BaseException;
import com.mazaiting.common.core.ex.exceptions.EmptyObjectException;
import com.mazaiting.manager.domain.vo.menu.RouteVO;
import com.mazaiting.manager.domain.entity.SysMenu;
import com.mazaiting.manager.domain.form.MenuForm;
import com.mazaiting.manager.domain.query.MenuQueryParam;
import com.mazaiting.manager.domain.vo.menu.MenuDetailVO;
import com.mazaiting.manager.domain.vo.menu.MenuVO;
import com.mazaiting.manager.domain.vo.menu.ResourceVO;

import java.util.List;

/**
 * sys_menu菜单表 服务类
 *
 * @author 党海亮
 * @since 2022-03-22
 */
public interface ISysMenuService extends IService<SysMenu> {

    /**
     * 路由列表
     * @return 路由列表
     */
    List<RouteVO> listRoutes() throws EmptyObjectException;

    /**
     * 获取菜单资源树形列表
     * @return 获取菜单资源树形列表
     */
    List<ResourceVO> listResources();

    /**
     * 获取菜单表格列表
     * @param queryParam 查询参数
     * @return 菜单表格列表
     */
    List<MenuVO> listMenus(MenuQueryParam queryParam);

    /**
     * 菜单下拉列表
     *
     * @return 菜单下拉列表
     */
    List<Option<Long>> listMenuOptions();

    /**
     * 根据菜单 ID 查询菜单详细信息
     * @param menuId 菜单 ID
     * @return 菜单详细信息
     */
    MenuDetailVO findById(Long menuId) throws EmptyObjectException;

    /**
     * 新增菜单
     * @param menuForm 菜单表格数据
     * @return true: 新增成功; false: 新增失败
     */
    boolean save(MenuForm menuForm) throws BaseException;

    /**
     * 修改菜单
     * @param menuForm 菜单表格数据
     * @return true: 修改成功; false: 修改失败
     */
    boolean update(MenuForm menuForm) throws BaseException;

    /**
     * 删除菜单
     * @param ids 菜单ID, 多个以英文(,)分割
     * @return true: 删除成功; false: 删除失败
     */
    boolean deleteByIds(String ids);
}
